#include <Arduino.h>

#define ID 0               // 遥控器ID  0:黑 1:壮(默认0)
#define MOTOR_A1_PIN 14    // 左前轮A1引脚
#define MOTOR_A2_PIN 13    // 左前轮A2引脚
#define MOTOR_B1_PIN 12    // 右前轮B1引脚
#define MOTOR_B2_PIN 11    // 右前轮B2引脚
#define MOTOR_C1_PIN 15    // 左后轮C1引脚
#define MOTOR_C2_PIN 16    // 左后轮C2引脚
#define MOTOR_D1_PIN 42    // 右后轮D1引脚
#define MOTOR_D2_PIN 41    // 右后轮D2引脚
#define SERVO_LEFT_PIN 7   // 叉臂舵机1引脚
#define SERVO_RIGHT_PIN 6  // 叉臂舵机2引脚
#define SERVO_UP_PIN 5     // 叉臂舵机3引脚
#define SERVO_DOWN_PIN 4   // 叉臂舵机4引脚
#define BUZZER_PIN 10      // 蜂鸣器引脚
#define WS2812_PIN 9       // ws2812引脚
#define I2C_SDA_PIN 47     // SDA引脚
#define I2C_SCL_PIN 38     // SCL引脚

#define WIFI_SSID "Xiaomi_2BEB"
#define WIFI_PASSWORD "Miss1358547929"

#define SERVO_FREQ 50       // 舵机频率
#define MAX_ANGLE 180       // 发送到舵机最大角度
#define SERVOMIN 150        // 舵机最小脉冲
#define SERVOMAX 600        // 舵机最大脉冲
#define BUZZER_MAX_HZ 2700  // 蜂鸣器最大频率

// REGISTER ADDRESSES
#define PCA9685_MODE1 0x00      /**< Mode Register 1 */
#define PCA9685_MODE2 0x01      /**< Mode Register 2 */
#define PCA9685_SUBADR1 0x02    /**< I2C-bus subaddress 1 */
#define PCA9685_SUBADR2 0x03    /**< I2C-bus subaddress 2 */
#define PCA9685_SUBADR3 0x04    /**< I2C-bus subaddress 3 */
#define PCA9685_ALLCALLADR 0x05 /**< LED All Call I2C-bus address */
#define PCA9685_LED0_ON_L 0x06  /**< LED0 on tick, low byte*/
#define PCA9685_LED0_ON_H 0x07  /**< LED0 on tick, high byte*/
#define PCA9685_LED0_OFF_L 0x08 /**< LED0 off tick, low byte */
#define PCA9685_LED0_OFF_H 0x09 /**< LED0 off tick, high byte */
// etc all 16:  LED15_OFF_H 0x45
#define PCA9685_ALLLED_ON_L 0xFA  /**< load all the LEDn_ON registers, low */
#define PCA9685_ALLLED_ON_H 0xFB  /**< load all the LEDn_ON registers, high */
#define PCA9685_ALLLED_OFF_L 0xFC /**< load all the LEDn_OFF registers, low */
#define PCA9685_ALLLED_OFF_H 0xFD /**< load all the LEDn_OFF registers,high */
#define PCA9685_PRESCALE 0xFE     /**< Prescaler for PWM output frequency */
#define PCA9685_TESTMODE 0xFF     /**< defines the test mode to be entered */

// MODE1 bits
#define MODE1_ALLCAL 0x01  /**< respond to LED All Call I2C-bus address */
#define MODE1_SUB3 0x02    /**< respond to I2C-bus subaddress 3 */
#define MODE1_SUB2 0x04    /**< respond to I2C-bus subaddress 2 */
#define MODE1_SUB1 0x08    /**< respond to I2C-bus subaddress 1 */
#define MODE1_SLEEP 0x10   /**< Low power mode. Oscillator off */
#define MODE1_AI 0x20      /**< Auto-Increment enabled */
#define MODE1_EXTCLK 0x40  /**< Use EXTCLK pin clock */
#define MODE1_RESTART 0x80 /**< Restart enabled */
// MODE2 bits
#define MODE2_OUTNE_0 0x01 /**< Active LOW output enable input */
#define MODE2_OUTNE_1 \
  0x02                    /**< Active LOW output enable input - high impedience */
#define MODE2_OUTDRV 0x04 /**< totem pole structure vs open-drain */
#define MODE2_OCH 0x08    /**< Outputs change on ACK vs STOP */
#define MODE2_INVRT 0x10  /**< Output logic state inverted */

#define PCA9685_I2C_ADDRESS 0x40      /**< Default PCA9685 I2C Slave Address */
#define FREQUENCY_OSCILLATOR 25000000 /**< Int. osc. frequency in datasheet */

#define PCA9685_PRESCALE_MIN 3   /**< minimum prescale value */
#define PCA9685_PRESCALE_MAX 255 /**< maximum prescale value */